package com.tarena.lbs.coupon.dao.repository.impl;


import com.tarena.lbs.base.protocol.pager.PageResult;
import com.tarena.lbs.coupon.api.pojo.param.UserCouponsParam;
import com.tarena.lbs.coupon.dao.mapper.UserCouponsMapper;
import com.tarena.lbs.coupon.dao.repository.UserCouponsRepository;
import com.tarena.lbs.coupon.pojo.po.CouponPO;
import com.tarena.lbs.coupon.pojo.query.UserCouponCodeQuery;
import com.tarena.lbs.coupon.pojo.query.UserCouponQuery;
import com.tarena.lbs.coupon.pojo.vo.UserCouponsVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class UserCouponsRepositoryImpl implements UserCouponsRepository {
    @Autowired
    private UserCouponsMapper userCouponsMapper;


    @Override
    public UserCouponsVO receiveDetail(UserCouponCodeQuery query) {
        log.info("查看优惠券码的二维码图片的仓储层：{}"+ query);
        UserCouponsVO vo = userCouponsMapper.receiveDetail(query);
        log.info("仓储层查询结果：{}",vo);
        return vo;
    }

    @Override
    public List<UserCouponsVO> receiveList(UserCouponQuery couponQuery) {
        log.info("用户领取优惠券列表的仓储层：{}",couponQuery);
        List<UserCouponsVO> vo = userCouponsMapper.receiveList(couponQuery);
        log.info("用户领取优惠券列表的仓储层查询结果：{}",vo);
        return vo;
    }

    @Override
    public CouponPO checkAndGetCoupon(UserCouponsParam param) {
        log.info("检查优惠券领取上限的仓储层：{}",param);
        // 修复类型转换错误，应该使用专门查询优惠券信息的方法
        CouponPO couponPO = userCouponsMapper.getCouponById(param.getCouponId());
        log.info("检查结果：{}",couponPO);
        return couponPO;
    }

    @Override
    public void receiveCoupon(UserCouponsParam param) {
        log.info("用户领取优惠券的仓储层：{}",param);
        userCouponsMapper.receiveCoupon(param);
        log.info("用户领取优惠券成功");
    }

    @Override
    public void incrementCouponUsage(Integer couponId) {
        log.info("增加优惠券已使用数量的仓储层：{}",couponId);
        userCouponsMapper.incrementCouponUsage(couponId);
        log.info("增加优惠券已使用数量成功");
    }


}
